package projet.ejb;
import java.util.Collection;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import projet.entity.BusinessAngel;
import projet.entity.Compte;
import projet.entity.Fondateur;
import projet.entity.Groupe;
import projet.entity.Investisseur;
import projet.entity.Portefeuille;
import projet.entity.Startup;

@Stateless
public class InvestisseurFacadeEJB implements InvestisseurFacade {
	@PersistenceContext(unitName = "SampleUnit")
	protected EntityManager entityMgr;
	
	public Investisseur add(Investisseur i) {
		entityMgr.persist(i);
		return i;
	}	
	
	public Investisseur findInvestisseur(String nom, String prenom){		
		Query query = entityMgr.createQuery("SELECT c FROM  Investisseur as c WHERE (c.nom=:n and c.prenom=:p ) ");
		query.setParameter("n",nom);
		query.setParameter("p",prenom);
		Investisseur c =   (Investisseur) query.getSingleResult();
		return c;
	}
	
	public Investisseur findById(int id) {	 		
		Query query = entityMgr.createQuery("SELECT s FROM Investisseur s JOIN FETCH s.l_pf WHERE s.id_investisseur=:n ");
		query.setParameter("n", id);
		Investisseur s =   (Investisseur) query.getSingleResult();
		return s;
		
	}
	
	
	public int findIdByIdCompte(int id) {
			 		
		Query query = entityMgr.createQuery("SELECT s.id_investisseur FROM Investisseur s WHERE s.compte.id_compte=:n ");
		query.setParameter("n", id);
		int s =  (Integer) query.getSingleResult();
		return s;
		
	}
	
	public Investisseur update(Investisseur i){
		return entityMgr.merge(i);
	}
	
	@SuppressWarnings("unchecked")
	public Collection<Investisseur> findAll() {
		 return entityMgr.createQuery("SELECT s FROM Investisseur as s").getResultList();
	}

	@Override
	public Collection<Investisseur> findAll_Groupe() {
		 return entityMgr.createQuery("SELECT s FROM Groupe as s").getResultList();
	}

	@Override
	public Collection<Investisseur> findAll_Fondateur(){
		 return entityMgr.createQuery("SELECT s FROM Fondateur as s").getResultList();
	}

	@Override
	public Collection<Investisseur> findAll_BusinessAngel() {
		 return entityMgr.createQuery("SELECT s FROM BusinessAngel as s").getResultList();
	}
	
	public void delete(int id) {
		Investisseur c = entityMgr.find(Investisseur.class,id);
			entityMgr.remove(c);
		}
	
}